// import XLSX from "xlsx-js-style";     // 需要安装此库

/**
 * headers 表头
 * excelData 表数据
 * fileName 文件名
 * colWidth 宽
 * rowHeight 高
 * merges 合并单元格
 */
export function exportExcel(options: any) {
  let { headers, excelData, fileName, colWidth, rowHeight, merges } = options;

  fileName = fileName || "年度报表";
  colWidth =
    colWidth ||
    headers.map(() => ({
      wpx: 110 // 默认宽度
    }));

  rowHeight =
    rowHeight ||
    headers.map(() => ({
      hpx: 35 // 默认高度
    }));

  merges = merges || []; // 如果没有合并单元格设置为空数组

  // 单元格样式
  const cellStyle = {
    font: { bold: false, sz: 12, name: "宋体" },
    alignment: { vertical: "center", horizontal: "center" },
    border: {
      top: { style: "thin", color: { rgb: "FF000000" } },
      bottom: { style: "thin", color: { rgb: "FF000000" } },
      left: { style: "thin", color: { rgb: "FF000000" } },
      right: { style: "thin", color: { rgb: "FF000000" } }
    }
  };

  // 表头样式
  const headerStyle = {
    ...cellStyle,
    font: { bold: true, sz: 14 }, // 加粗表头字体
    fill: { fgColor: { rgb: "87CEEB" } } // 表头背景颜色
  };

  // 获取表头的标题和数据对应的 key
  const excel_headers_key = headers.map((item: any) => item.key);
  const excel_headers_title = headers.map((item: any) => item.title);

  // 将数据格式化为二维数组
  const excel_data = excelData.map((item: any) => {
    return excel_headers_key.map((key: string) => item[key] ?? "");
  });

  // 在数据顶部插入表头
  excel_data.unshift(excel_headers_title);

  // 创建工作簿和工作表
  const workbook = XLSX.utils.book_new();
  const worksheet = XLSX.utils.aoa_to_sheet(excel_data);

  // 设置单元格宽度和高度
  worksheet["!cols"] = colWidth;
  worksheet["!rows"] = rowHeight;
  worksheet["!merges"] = merges;

  // 应用样式到所有单元格
  excel_data.forEach((row: any, rowIndex: number) => {
    row.forEach((_: any, colIndex: number) => {
      const cellRef = XLSX.utils.encode_cell({ c: colIndex, r: rowIndex });
      if (!worksheet[cellRef]) {
        worksheet[cellRef] = {}; // 初始化单元格对象
      }
      worksheet[cellRef].s = rowIndex === 0 ? headerStyle : cellStyle;
    });
  });

  // 将工作表添加到工作簿中
  XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");

  // 导出 Excel 文件
  XLSX.writeFile(workbook, `${fileName}.xlsx`, { bookType: "xlsx", type: "buffer" });
}
